package com.liuqi.knet.serialize;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

/**
 * 数据序列化和反序列化
 *
 * @author liuqi
 * @date 2024/12/13 14:40
 **/
public interface Serialization {

    /**
     * 序列化, <code>obj</code>数据序列化后, 写入至<code>OutputStream</code>
     *
     * @param output
     * @param obj
     * @throws IOException
     */
    void serialize(OutputStream output, Object obj) throws IOException;

    /**
     * 反序列化, 从<code>input</code>读取字节流, 反序列化为数据对象
     *
     * @param input
     * @return
     * @throws IOException
     */
    Object deserialize(InputStream input) throws IOException;

    /**
     * 反序列化, 从<code>input</code>读取字节流, 反序列化为<code>target</code>数据对象
     *
     * @param input
     * @param target
     * @return
     * @throws IOException
     */
    <T> T deserialize(InputStream input, Class<T> target) throws IOException;

}
